我有一个包含多个列的现有数据库。其中一个是“语言”,表示行中其他数据的语言。
如果数据库中还没有几千行,我希望实现的设计很容易编辑。
我想要做的是选择所有不同的语言(英语,西班牙语,法语,淬火......) - 我们可以假设这些都是小写的,并将这些数据放入自己的表中。
我想创建的表格结构简单:
Language ID | Language | Shorthand for language
1 | English | en-us
然后我希望编辑我的原始表格,而不是“语言”列(我将删除),我希望输入相应语言ID的编号。
因此,例如,英文行将如下所示:
IrrelevantInfo | LanguageID
foobar | 1
我可以在不丢失所有数据的情况下这样做吗?
答案 0 :(得分:6)
当然。
这样的事情应该有效:
CREATE TABLE Languages (id int identity NOT NULL PRIMARY KEY,
[Language] varchar(100),
Shorthand varchar(100))
BEGIN TRAN -- We do a transaction here to ensure consistency
INSERT INTO Languages ([Language])
SELECT DISTINCT [Language]
FROM MySourceTable
-- Update the shorthands later
ALTER TABLE MySourceTable
ADD LanguageID int
FOREIGN KEY REFERENCES Languages(id)
UPDATE t
SET LanguageID = l.id
FROM MySourceTable T
INNER JOIN Languages l
ON l.[Language] = t.[Language]
ALTER TABLE MySourceTable
DROP [Language]
COMMIT TRAN
我还强烈建议在LanguageId
字段上添加索引,并重建所有索引,尤其是聚簇索引。添加和删除列会对表和索引的碎片造成严重破坏。
答案 1 :(得分:2)
当然有可能。
LanguageID
添加到现有表格中。LanguageID
列联接的语言表更新现有表格中的language
。language
。