MS-SQL |多次访问一个表

时间:2015-02-20 13:04:59

标签: sql sql-server

我们正在销售打印机和墨水。我们正在切换标签软件并希望实现数据库。 我们的标签上有安全说明。每条指令都有一个唯一的标识符,我们有多种语言的指令。每种墨水有大约6-12条指令。

现在我设计了一个数据库。您将在本文的底部找到这些表格。

是否有可能获得墨水和几条安全说明?

INK
i_id
i_name

INSTRUCTION
in_id
in_text

INSTRUCTION_IDENTIFIER
ii_id
ii_name

LANGUAGES
l_id
l_name

INSTRUCTION_LANGUAGE_IDENTIFIER
ili_id
fk_in_id
fk_ii_id
fk_l_id

SUM_TABLE
st_id
fk_i_id
fk_ii_id_1
fk_ii_id_2
fk_ii_id_3
fk_ii_id_4
fk_ii_id_5
fk_ii_id_6
fk_ii_id_7
fk_ii_id_8
fk_ii_id_9
fk_ii_id_10
fk_ii_id_11
fk_ii_id_12

2 个答案:

答案 0 :(得分:1)

http://beginner-sql-tutorial.com/sql-joins.htm

您需要了解联接以从其他表中获取信息 它会像

Select sum.*,ins1.name,ins2.name, ..... ins12.name
from SUM_TABLE sum 
inner join INSTRUCTION ins1  on ins1.ii_id =  sum.fk_ii_id_1 
inner join INSTRUCTION ins2  on ins2.ii_id =  sum.fk_ii_id_2 
....     

inner join INSTRUCTION ins12  on ins12.ii_id =  sum.fk_ii_id_12

您应该重新考虑关于总和表的策略,因为如果您将来需要13个ID,您真的不想重新创建表

答案 1 :(得分:0)

我不会在墨水和墨水上工作因此我的建议可能存在缺陷,但根据您的描述,我会采用不同的解决方案:

INK
i_id
i_name

INSTRUCTION
in_id
in_text
l_id

LANGUAGES
l_id
l_name

INK_INSTRUCTION
i_id
in_id
ii_position

如果你不需要修改数据库结构,你需要更多的指令行(正如@JamesZ所指出的那样)。

如果这是您将要出售的软件(可能)将来依赖的东西,那么您应该支付定义数据库结构的支持。 错误的数据库结构可能会使事情成为使用和维护的噩梦,如果你错了,那么你会看到成本上升(开发困难,维护困难,复杂升级,复杂迁移)。