簡體   English   中英

MySQL中的DB模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM