我从一个已决定使用SQL通过Access处理的系统中收到2个报告。一个报告称为“评估”,另一个报告称为“骗局”。目前,“ Con”表尚未标准化。有称为“用户”和“用户角色”的字段,我想使用的PK为“ CO_ID”。对于“ CO_ID”的每个实例,都有多个不同的“用户角色”和“用户”。但是,“用户角色”仅限于6个选择。但是,每个“ CO_ID”的一个角色可能有多个用户。这将导致多个具有相同“ CO_ID”相关数据的行。
这两个报告的生成方式完全相同,因此每次的过程都将完全相同。
我需要创建一个表,其中包含“ CO_ID”和其他与“ CO_ID”相同的字段。
自动化此表标准化的最佳方法是什么?
我试图使用SQL解析数据,但是找不到一个好的方法。我想是这样的:
SELECT DISTINCT CO_ID, [EVERY OTHER FIELD IS THE SAME FOR CO_ID]
FROM table1;
SELECT DISTINCT User_Role
FROM table1;
SELECT DISTINCT User
FROM table1;
SELECT DISTINCT CO_ID, User_Role, User
第一个SQL命令将创建一个唯一的CO_ID列表,第二个SQL命令将为User_Role创建一个查找表,第三个SQL命令将为User创建一个查找表,最后一个将CO_ID与User_Role和User相关联。但是,我不确定如何为所有表创建主键以将它们关联在一起。这也许也不是最好的方法,所以我愿意接受想法。
table1 = Con
CO_ID Field1 Field2 User_Role User
WA13 ABS 2019-02-13 Admin User1
WA13 ABS 2019-02-13 Manager User2
WA14 DB 2019-01-01 Secretary User3
WA14 DB 2019-01-01 Manager User2
WA14 DB 2019-01-01 Analyst User4
WA14 DB 2019-01-01 Analyst User5
WD15 ZZ 2018-11-20 Supervisor User6
WD15 ZZ 2018-11-20 Manager User7
WD15 ZZ 2018-11-20 Admin User8
WD15 ZZ 2018-11-20 Analyst User9
我希望结果是什么 结果表
CO_ID Field1 Field2
WA13 ABS 2019-02-13
WA14 DB 2019-01-01
WD15 ZZ 2018-11-20
User_Role
Admin
Manager
Secretary
Analyst
Supervisor
User
User1
User2
User3
User4
User5
User6
User7
User8
User9
答案 0 :(得分:1)
您在用户和角色之间具有一对多的关系,因为一个用户可以有多个角色,并且一个角色可以分配给多个用户。这种一对多关系需要用户和角色之间的链接表。此外,您正在为每个用户/角色关系分配一个“骗局”。
role user_role user
+------------+ +----------------+ +------------+
| PK role_id |<----| PK, FK role_id | /-->| PK user_id |
+------------+ | PK, FK user_id |--/ +------------+
| name | +----------------+ | name |
| | | FK co_id | | |
| | +----------------+ | |
| | | | |
| | | | |
| | co v | |
+------------+ +----------------+ +------------+
| PK co_id |
+----------------+
| field1 |
| field2 |
+----------------+
因此,在链接表中,您有一个由role_id
,user_id
组成的复合主键,因为每个用户/角色关系都是唯一的。此外,还有co_id
作为附加信息。
role
和user
和co
都位于关系的1边。 user_role
在所有关系的n
端。
或者,也可以在用户表中使用FK co_id
。这取决于“ co”或“ con”代表什么。没有更多背景知识就很难说。
我对用户可以担任多个角色的假设可能是错误的(因为通过查看您的数据,似乎该用户更像是一名员工)。然后,您将获得以下结构,其中为每个用户分配了一个角色和一个合作伙伴:
role
+------------+
user ---> | PK role_id |
+------------+ / +------------+
| PK user_id | / | name |
+------------+ / +------------+
| FK role_id | --
| FK co_id | -- co
| name | \ +----------------+
| | \----> | PK co_id |
| | +----------------+
| | | field1 |
+------------+ | field2 |
+----------------+