我只是有几个问题我很困惑。我不能让我的er图出现在这个帖子上,所以我不得不创建一个“文本”版本。
Entity: customers
Attributes:
cus_id -- primary key
cus_fname -- multi-attribute (name)
cus_lname -- multi-attribute (name)
cus_gender -- multi-attribute (name)
cus_dob
Entity: products
Attributes:
prod_id -- primary key
prod_name
prod_cost
prod_retail
Bridge Entity: buys
Attributes:
prod_id
cus_id
---------------------------------------
CREATE TABLE customers (
cus_id NUMBER(5,0)
CONSTRAINT cus_id_pk
PRIMARY KEY (cus_id),
cus_fname VARCHAR2(32),
cus_mname VARCHAR2(32),
cus_lname VARCHAR2(32),
cus_gender NUMBER(1,0),
cus_dob DATE
);
-----------------------------------------
CREATE TABLE products (
prod_id NUMBER(5,0)
CONSTRAINT cus_id_pk
PRIMARY KEY (cus_id),
prod_name VARCHAR2(32),
prod_cost NUMBER(4,2),
prod_retail NUMBER(4,2)
);
1如何创建桥实体?所以我的桥梁实体被称为购买,我将如何做到这一点?我在网上看了一下,但只看到了select语句。
如何创建多值属性?与客户名称一样,这是一个多值属性
我应该在主键中也包含notnull吗?我正在考虑在客户的名字中添加一个notnull。
1条答案
按热度按时间yqlxgs2m1#
buys
称为关联表、联接表、关系表或任何其他数量的名称。我不会将其称为“实体”,除非它确实是您系统中的实体(表示可以唯一标识的人、地点、事物概念或事件,对业务感兴趣,并且我们可以存储有关的信息)关联表的表定义可能如下所示:
注:我不相信
NUMBER(5,0)
是有效的mysql数据类型。对于主键列,我倾向于使用整数数据类型,INT
或者BIGINT
. 但是外键列必须与引用的主列的数据类型完全匹配,所以我使用了NUMBER(5,0)
作为引用列的数据类型的副本。多值属性可以实现为子表、一对多关系。但我在模型中没有看到任何多值属性的迹象。
复合属性可以实现为一个单独的表。但我不会去那里,除非有一个用例使它变得有利。
我个人对处理复合属性的偏好是只在列名前面加前缀。例如,作为这些列是属性“name”的组件的指示。。。
类似地,对于“邮寄地址”属性
(其他一些关系数据库支持声明复合“类型”;我不相信mysql中有这个功能(我不会选择将复合属性表示为json对象。)
这个
PRIMARY KEY
约束已对主键中的所有列强制not null。但明确地包含NOT NULL
约束。我倾向于添加NOT NULL
对不希望接受空值的任何列的约束。后续行动
对于实体的多值属性(对于单个示例,属性可以有零个、一个或多个值),公共模式是子表。以客户电话号码为例。
我们可以用外键创建表,引用customers中的cus\u id。
例如,有三个电话号码的客户在电话号码表中有三行。没有电话号码的客户在表中没有行。
这是多值属性。。。实体的属性,该属性可以有零个、一个或多个值。
复合属性由多个组件属性组成。例如,customers“name”属性可以是几个简单属性的组合:
无论是简单属性还是复合属性,总是可以将实体的某些属性拆分为单独的表。我们这样做的一个最常见的原因是支持多个值。但我们也可以对单值属性这样做。
考虑“phone number”属性。可以建模为复合属性: