MS-SQL |多次访问一个表

MS-SQL |多次访问一个表,sql,sql-server,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 IN

我们出售打印机和墨水。我们正在切换我们的标签软件,并希望实现一个数据库。 我们的标签上有安全说明。每个指令都有一个唯一的标识符,我们有几种语言的指令。每种墨水大约有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

您需要了解连接,以便从其他表中获取信息 大概是

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,你真的不想重新创建该表

我不在ink&co工作,因此我的建议可能有缺陷,但根据你的描述,我会采用不同的解决方案:

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所指出的)

如果这是您在将来(可能)几年内将要销售的软件所依赖的东西,那么您应该为定义数据库结构的支持付费。
错误的数据库结构可能会使使用和维护成为一场噩梦,如果您启动错误,那么您将看到成本增加(难以开发、难以维护、复杂升级、复杂迁移)。

能否请您改进格式,这很难理解…表
指令语言标识符
中的
fk\u s\u id
是什么?@EBS\u EDV:Ya您可以使用join语句获取它。您尝试过吗?显然,您知道外键和表之间的关系,您是否尝试编写一个查询来执行此操作?在同一行中有12个ID看起来很可疑。你不能用id+序列号来代替吗?然后,如果您获得了要添加的第13个id,就不必更改数据库结构。此外,可能还缺少一些东西,因为感觉语言与其他任何东西都没有联系。