是否可以在mysql中创建这样的表? 如果是,请用表格中的样本数据向我解释(当我们第一次插入时,表格中有什么价值)。
Subscriber
------------
SubscriberId: guid() <<pk>>
privateUserIDs string <<fk>>
value1 string
...
User
----
privateUserIDs string <<pk>>
SubscriberId: guid() <<fk>>
value2 string
...
我从Google文档中获取了此数据库架构。
注意:关系是1..n
答案 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约束而导致其他数据不一致。