我试图通过在MySQL中创建一个电影院数据库来了解数据库是如何工作的。我创建了以下需求,并试图基于3 NF勾画出我的ER图。很多资源都说我应该使用关联表,所以我尝试了,但我不确定我是否正确理解了它们之间的关系。这是一个满足需求的好的数据库设计吗?关联是否正确?enter image description here
要求:
·一个人可以是一个雇员或一个客户。
·员工也可以是客户。
·员工可以在多个剧院工作。
·剧院有许多放映室(每个剧院的放映室数量不同)。
·屏幕室可以具有不同的座位布置/容量/配置。
示例如下:
表:Screen_Rooms
| room_id (PK) | theater_id (PK, FK) | capacity | rows | seats |
|----------------|---------------------|----------|------|-------|
|1 |0001 |10 | 2 |5 |
|2 |0001 |15 |5 |3 |
|1 |0002 |10 |5 |2 |
|2 |0002 |20 |4 |5 |
Table: Seat
| theater_id (PK, FK) | room_id (PK, FK) | seat_id (PK) | seat_row | seat_number |
|-----------------------|------------------|--------------|----------|-------------|
|0001 |1 |A1 |A |1
|0001 |1 |A2 |A |2
|... | | | |
|0001 |2 |E5 |E |5
字符串
·屏幕室有放映时间。他们一次只能放映一部电影,但一天中可以放映多部电影(即上午8点放映蜘蛛侠,然后下午12点放映罗宾汉)。
·电影可以有很多放映时间。
·电影可以有很多类型。
·电影只能有一个导演,但可以有许多演员。·导演可以是演员。
·客户可以做很多销售。
·客户可以有许多付款的销售,但只能支付一种方式(即。现金或信用卡,两者不可兼得)。
·员工可以进行许多销售(即销售门票)。
·销售可以是许多票。
·有不同的门票类型(儿童,成人,老年人,军事)。
·每张票都被分配了一个电影座位,在房间里,在剧院里。
2条答案
按热度按时间vs91vp4v1#
虽然我不会做一个完整的,我会尽量给予一些例子来规范化。你有的东西已经很接近了。你可能有很多剧院,从这个开始。
字符串
在每个剧院里,你都有许多屏幕。每个屏幕都是一个房间。但是如果有多个影院,您需要将每个屏幕与其特定的影院联系起来。例如:剧院A可能有5个屏幕,剧院B可能有11个,等等
型
根据你的座位表
型
因此,此时,只需一个座位ID,您就可以知道哪个屏幕正在放映以及哪个影院正在放映
现在来看看即将上映的电影
型
现在你有你所有的屏幕和什么电影是可用的。现在你需要知道什么样的展览是可用的。
型
现在让人们买票
型
因此,正如您在这里看到的,每个表都有一个主键,这将您与其他所有内容联系起来。不处理表示主键的复合键(多列),而是处理简化连接的特定唯一ID。表的“ID”键的表上下文如上所述
型
因此,如果您在表中看到一个ID而不是用于此目的,则您知道它是外键,但它也指示它源自哪个表
型
7kqas0il2#
您至少有3个“实体”表:人,剧院,放映室。它们在“列”中具有合适的属性。人与戏剧之间可能存在多对多的关系。ScreenRoom可能需要引用它所引用的Theater。
至于nNF,我不能说,那个符号是在我构建表很久之后发明的。