我以前的数据库设计看起来就像
id | name_en | title_en | name_ru | title_ru ...我在为多语种网站寻找最优的数据库结构,在那里我可以添加删除语言,发布.等,没有改变数据库结构相当长的时间。
终于创造了一个。但我不确定它是否是最佳的,它有几个致命的问题:
语言表-用于整个应用程序的语言列表
-- ----------------------------
-- Table structure for Language
-- ----------------------------
DROP TABLE IF EXISTS `Language`;
CREATE TABLE `Language` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`iso` varchar(3) NOT NULL,
`name` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL,
`order` tinyint(3) NOT NULL DEFAULT '0',
`active` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;MenuType表格-菜单类型如侧边栏菜单,顶部菜单.
-- ----------------------------
-- Table structure for MenuType
-- ----------------------------
DROP TABLE IF EXISTS `MenuType`;
CREATE TABLE `MenuType` (
`id` tinyint(2) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`,`name`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;菜单表-基于父级子结构的所有菜单项。
-- ----------------------------
-- Table structure for Menu
-- ----------------------------
DROP TABLE IF EXISTS `Menu`;
CREATE TABLE `Menu` (
`uid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`id` int(11) unsigned DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`url` varchar(255) DEFAULT NULL,
`languageID` tinyint(3) unsigned DEFAULT NULL,
`menuTypeID` tinyint(2) unsigned DEFAULT NULL,
`order` int(2) DEFAULT NULL,
`parent` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;页面表-多语言页面表
-- ----------------------------
-- Table structure for Page
-- ----------------------------
DROP TABLE IF EXISTS `Page`;
CREATE TABLE `Page` (
`uid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`id` int(11) DEFAULT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`languageID` tinyint(3) unsigned DEFAULT NULL,
`content` text COLLATE utf8_unicode_ci,
`deleted` tinyint(1) DEFAULT NULL,
`permalink` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;我的设计就是这样的:让我们说我们的项目是用2种语言来完成的。英语( language表中的id 1)和俄语( language表中的id 2)。任何页面在表中都有2条记录:比如{uid - 1, id - 2 lang - 1 ...}; {uid - 2 , id - 2, lang - 2 ...}。
我认为它会有严重的问题,因为重复id的外键和编程将很难维护它。有任何建议来修正它或任何其他设计建议?
请分享您的多语种数据库设计思想。
我没有在数据库方面的经验,真的需要一些坚固的数据库设计,以便在项目中使用很长时间。
需要一些数据库设计,将与多语言seo友好的urls,多语种的文章工作。等等。
提前谢谢你。
发布于 2013-09-16 07:43:27
您只需将键更改为页面id和语言id的组合即可。
发布于 2013-09-15 11:50:35
我不知道你为什么要把页面内容存储到数据库中。页面内容可以通过某种后端进行更改吗?
我只存储来自用户输入的依赖于语言的内容。在这种情况下,我使用与您相同的数据库设计。
如果页面是静态的,则从ini文件加载字符串,然后将这些值用于模板中。
这些步骤将是:
strings.en.txt:
title = Title
paragraph1 = This is the first paragraph.strings.es.txt
title = Título
paragraph1 = Este es el primer párrafo$langs = parse_ini_file("strings.".$_SERVER['HTTP_ACCEPT_LANGUAGE'].".txt");
<h1><?php echo $lang['title'];?></h1> <p><?php echo $lang['paragraph1'];?></p>如果您最终完成了这个解决方案,我建议您使用一些模板引擎(这样的智能或小树枝)。您将有一个更干净的代码。
https://stackoverflow.com/questions/18811377
复制相似问题