首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL cPK FK表关系设计故障

SQL cPK FK表关系设计故障
EN

Stack Overflow用户
提问于 2020-04-02 22:43:02
回答 1查看 165关注 0票数 0

我对SQL和数据库很陌生,但我的任务是创建几个表来保存信息。我在如何最好地处理这个问题上遇到了麻烦。

表A /* Populated by Flat csv file in SSMS-2016 */

代码语言:javascript
复制
Col1(name), Col2(ArrayX,cPK), Col3(ArrayY,cPK), Col4(subname)
 /* two are required to identify a row. 1,000,000 rows */

目标:--我想向每一行添加一个描述,而不需要无休止地重复一个文本块,其中可能有10,000个行需要相同的描述文本。

示例

代码语言:javascript
复制
**Table A**

Name, ArrayX, ArrayY, Subname
Red,  1, 1, Crayon
Red,  1, 2, Car
Red,  1, 3, Ball
Blue, 2, 1, Ball
Blue, 2, 2, Earth

**Table B**

Name(PK), Descriptions(Text)
Blue, "color, sky, azul, rainbow"
Red, "color, fire, hot, sun, rainbow"
Green, "(null value)"

我希望最终用户能够搜索

代码语言:javascript
复制
Select *
From Table A 
where Name like %color% AND Subname like %car%`

And SQL returns: `Red, car, "color, fire, hot, sun"`

代码语言:javascript
复制
where Name like %rainbow%

SQL返回:

代码语言:javascript
复制
name, subname, table2(descriptions)
Red,  Crayon, "color, fire, hot, sun, rainbow" 
Red,  Car,    "color, fire, hot, sun, rainbow" 
Red,  Ball,   "color, fire, hot, sun, rainbow" 
Blue, Ball    "color, sky, azul, rainbow"
Blue, Earth   "color, sky, azul, rainbow"

重要的是,表all (Name)应该为所有值相同的项目键入说明,从而节省文本字段所需的重复和存储。

我猜一个复杂的视图会把我带到这里,但我也希望能够输入这样的描述

代码语言:javascript
复制
Update Table B        /* this can be manual as the number of unique items for Table1 Col(Name) is low */
set Description = "color, fire, hot, sun, rainbow"
Name = red

因此,在这一点上,我认为我被困在创建一个搜索或过程,可以让我加入上述。我知道我需要where table A Name = Table B Name,但我还没弄明白。

我要怎么做才有意义?我是否应该在第一个表上创建一个身份,作为一个PK链接到表B?如果我这么做了,我能自动填写表B(姓名)吗?

谢谢你走了这么远,用了一下伪码。我对数据库开发人员有了新的尊重!

EN

回答 1

Stack Overflow用户

发布于 2020-04-03 04:39:35

我建议你做以下几个步骤:

  1. 按照规范化设计,TableB应该有描述,重复在TableA中的描述。
  2. 创建一个视图,该视图根据名称连接TableA和TableB。

代码语言:javascript
复制
SELECT a.Name, a.ArrayX, a.ArrayY,a.SubName,b.Descriptions
FROM TableA AS a
INNER JOIN TableB AS b
ON a.Name = b.Name;

  1. 为TableA在Name列上创建非聚集索引,在TableB上创建聚集索引以获得良好的连接性能。
  2. 现在可以在视图顶部搜索,而不是像您所说的TableA
  3. ,因为TableB中的行数较少,因此可以手动在TableB中插入或更新颜色值。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61002337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档