- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在建立一个具有大量多对多关系的数据库。每个关系都是通过链接表建模的。例子:
一个人有多个工作,工作由多个人完成。一个人有好几间房子,房子被好几个人住着。一个人有许多他喜欢的餐馆,餐馆有许多喜欢这家餐馆的人。
首先我是这样设计的:
表:Person、Job、House、Restaurant、Person_Job、Person_House、Person_Restaurant。
关系 1 - n:Person -> Person_Job,Person -> Person_House,Person -> Person_Restaurant,Job -> Person_Job,House -> Person_House,Restaurant -> Person_Restaurant。
这很快就会导致拥挤和复杂的 ER 模型。
为了简化这一点,我将其建模如下:
标签:人、工作、房子、餐厅、Person_Attributes
关系 1 - n:Person -> Person_Attributes,Job -> Person_Attributes,House -> Person_Attributes,Restaurant -> Person_Attributes
Person_Attributes 表应如下所示:
人名
作业编号
户号
餐厅编号
如果一个人 - 工作关系存在,我将添加一个条目,如下所示:
P1, J1, NULL, NULL
如果一个人 - 房子关系存在,我将添加一个条目,如下所示:
P1,空,H1,空
因此,第二个示例中的属性表将具有与第一个示例的链接表相加的相同数量的条目。
这大大简化了 ER 模型,只要我为 personId + jobId、personId + houseId 和 personId + restaurantId 构建索引,我认为不会有太多性能影响。
我的问题是:
第二种方法是建模的正确方法吗?如果不是,为什么?
我对性能影响是否正确?如果不是,为什么?
我的意思的 MySQL Workbench 示例可以在这里找到:
http://www.2shared.com/file/3GBnodEZ/example.html
最佳答案
您的设计违反了 Fourth Normal Form .您试图在一张表中存储多个“事实”,这会导致异常。
The Person_Attributes table should look something like this: personId jobId houseId restaurantId
personId jobId houseId restaurantId
1234 42 87 5678
1234 42 87 9876
personId jobId houseId restaurantId
1234 123 87 5678
1234 123 87 9876
1234 42 87 13579
personId jobId houseId restaurantId
1234 123 87 5678
1234 123 87 9876
1234 123 87 13579
1234 42 87 5678
1234 42 87 9876
1234 42 87 13579
PRIMARY KEY
约束要求所有列都不是 NULL。
personId jobId houseId restaurantId
1234 123 87 5678
1234 NULL NULL 9876
1234 NULL NULL 13579
personId jobId houseId restaurantId
1234 123 87 5678
1234 NULL NULL 9876
1234 42 NULL 13579
personId jobId houseId restaurantId
1234 123 87 5678
1234 NULL NULL NULL
1234 42 NULL 13579
personId jobId houseId restaurantId
1234 123 87 5678
1234 NULL NULL 9876
1234 42 NULL NULL
personId jobId houseId restaurantId
1234 123 87 5678
1234 42 NULL 9876
INSERT
到 Person_Restaurant 表。删除该关联只是一个
DELETE
.与工作或房屋有多少关联并不重要。并且您可以在每个交集表中定义主键约束以强制唯一性。
关于database-design - 如何为具有许多 m 的数据库建模 :n relations on a table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7083699/
在过去的几个月里,我一直在研究 Haskell,我遇到了一个我不太确定如何处理的单子(monad)的情况。 我有一个 a -> m a 类型的值第二个类型为 m (a -> a)我需要对它们进行组合,
仿函数有 (a -> b) -> m a -> m b 应用程序有 f (a -> b) -> f a -> f b Monad 有 m a -> (a -> m b) -> m b 但是,是否有扩展
我是 Haskell 的新手,我想知道是否有比 Hoogle 更好的方法来确定一个库功能是否重复? 举个例子:我有很多函数f :: Monad a => a -> m a我想链接在一起,比如 f123
将存储在一系列列表中的 m、m、n 维数组组合成一个 m、m、n 维数组的方法是什么? 示例: 这是三个包含 m,m,n 维数组的列表: list1 <- array (1, dim = c(5, 5
有没有办法写一个函数f::(a -> b -> ... -> t) -> (Monad m => m a -> m b -> ... -> m t ),基本上是 liftMn 对于任何 n? (编辑:
我有一个像这样的 pandas 数据框: df = pd.DataFrame({'A':[1,3,2,9],'B':[2,1,2,7],'C':[7,2,4,6],'D':[8,1,6,4]},ind
这个问题来自文章“Trivial Monad”,地址:http://blog.sigfpe.com/2007/04/trivial-monad.html 。提供的答案是 h x y = x >>= (
所以>>= :: m a -> (a -> m b) -> m b和>> :: m a -> m b -> m b . 而 f b -> f a . 但我想要一些能m a -> (a -> m b)
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 3 年前。 Improve
当我安装 rakudo来源: $ git clone git@github.com:rakudo/rakudo.git $ cd rakudo $ perl Configure.pl --gen-mo
我正在尝试通过查看一些练习来提高我的 Idris 技能 Software Foundations (最初是为 Coq 设计的,但我希望对 Idris 的翻译不会太糟糕)。我在使用 "Exercise:
我想知道以下是否可行。 与服务器交换密码时,应保护密码。因此,用户可以使用生成的 key kUser 来加密密码。 Encrypt(m, kUser) 生成加密消息 eU(m)。现在用户将此信息发送到
这两个表之间存在什么样的关系(1:1、1:m、m:m,等等)? CREATE TABLE IF NOT EXISTS `my_product` ( `id` int(11) NOT NULL au
有人可以解释类型的含义以及如何实现吗? class Foldable f where foldMap :: (Monoid m) => (a -> m) -> f a -> m 基于 https:
例如,在 MVC 应用程序中,我可以使用 Html 助手来创建这样的标签: @Html.LabelFor(m => m.ProductName) 我没有在任何地方声明变量“m”,但 IDE 会自动找出
更新:澄清、更明确的重点和缩短的示例: 我可以避免 M op+(M&&,M&&) 过载吗?假设,我想很好地处理 RValues?我想其他三个重载是必需的。 我首先使用 (&&,&&) 重载的原因: 通
假设我有一个函数,它接受两个向量并返回一个整数,例如一个向量中也存在另一个向量中的元素数量。喜欢: f m [,1] [,2] [,3] [1,] "c" "i" "c" [2,] "
我想将字符串(字幕)转换为: 585 00:59:59,237 --> 01:00:01,105 - It's all right. - He saw us! 586 01:00:01,139 -->
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
是否可以将 Linux 中的大文件将 d.m.Y h:m:s 转换为 Y-d-m h:m:s? 示例数据 "30.07.2016 00:00:00",DN123,PAPN,PAPN,TEST,9189
我是一名优秀的程序员,十分优秀!