mysql中的Db Schema

时间:2013-02-26 06:55:13

标签: mysql database db-schema

是否可以在mysql中创建这样的表? 如果是,请用表格中的样本数据向我解释(当我们第一次插入时,表格中有什么价值)。

Subscriber
------------
SubscriberId: guid() <<pk>>
privateUserIDs string <<fk>>
value1 string
...

User
----
privateUserIDs string <<pk>>
SubscriberId: guid() <<fk>>
value2 string
...

我从Google文档中获取了此数据库架构。

注意:关系是1..n

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以通过关闭外键检查来在架构中以任何顺序创建表。

例如,下面我在Users表上创建一个带有外键的BannedUsers表,但尚未创建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;

答案 1 :(得分:0)

这是不可能的。理由很简单

如果您首先创建用户表,那么在描述它的架构表时,订户必须存在,因为您需要在用户表中引用订户表的PK来创建FK。

同样,如果您首先创建订阅者表,则需要用户表模式,由于上述原因,这也是不可能的。

此外,如果以某种方式定义了两个表,将来最终可能会出现高度不一致的数据库,因为从1个表中删除行会因为FK约束而导致其他数据不一致。