私の古いデータベースの設計は次のようでした
id | name_en | title_en | name_ru | title_ru ...
データベース構造をかなり長い間変更せずに、言語の追加、投稿の削除などを行うことができる多言語 Web サイトの最適なデータベース構造を探していました。
最後に1つ作成しました。しかし、それが最適かどうかはわかりませんし、いくつかの致命的な問題があります:
言語テーブル - アプリケーション全体の言語のリストです
-- ----------------------------
-- 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 つのレコードがあります: like {uid - 1, id - 2 lang - 1 ...}; {uid - 2 , id - 2, lang - 2 ...}
.
外部キーで ID を繰り返すため、深刻な問題が発生し、プログラムでそれを維持するのが難しいと思います。それを修正するための提案やその他の設計上の提案はありますか?
多言語データベースの設計アイデアを共有してください。
私はデータベースの経験がなく、プロジェクトで長時間使用するための堅実なデータベース設計が本当に必要です。
多言語の seo に適した URL、多言語の投稿で動作するデータベース設計が必要です。等..
前もって感謝します。