[英]Db Schema in mysql
是否可以在mysql中創建這樣的表? 如果是,請在表格中提供示例數據來解釋我(當我們第一次插入表格時,表格中的值將是什么)。
Subscriber
------------
SubscriberId: guid() <<pk>>
privateUserIDs string <<fk>>
value1 string
...
User
----
privateUserIDs string <<pk>>
SubscriberId: guid() <<fk>>
value2 string
...
我從Google文檔獲得了此數據庫架構。
注意:關系為1..n
通過關閉外鍵檢查,可以在模式中以任何順序創建表。
例如,下面我創建一個BannedUsers表,並在Users表上創建一個外鍵,而尚未創建Users表。
之后,請確保再次啟用外鍵檢查。
下面的示例已使用InnoDB引擎在MySQL 5.5.31數據庫上進行了測試。
SET FOREIGN_KEY_CHECKS=0;
CREATE TABLE IF NOT EXISTS `BannedUsers` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_id` bigint(10) unsigned NOT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`),
KEY `FK_BannedUsers_Users` (`user_id`),
CONSTRAINT `FK_BannedUsers_Users` FOREIGN KEY (`user_id`) REFERENCES `Users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE IF NOT EXISTS `Users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(254) COLLATE utf8_unicode_ci NOT NULL,
`username` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
`firstname` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
`lastname` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL,
`created` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
SET FOREIGN_KEY_CHECKS=1;
這不可能。 原因很簡單
如果首先創建用戶表,則在描述它的模式表時必須存在訂閱者,因為您將需要在用戶表中引用訂閱者表的PK才能創建FK。
同樣,如果首先創建訂戶表,則將需要用戶表架構,由於上述原因,這也是不可能的。
此外,如果以某種方式定義兩個表,將來可能會導致db高度不一致,因為從1個表中刪除行會由於FK約束而使數據處於其他不一致的狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.