私は、インタビューで同義語のトラックを保持する辞書のデータベースを設計するように頼まれました。同義語の部分はインタビューの後の質問でした。 1
に等しいid
、69
と72
有する単語がシソーラスをSQLデータベースで設計する最良の方法は?
Synonyms
======================
wordA_id | wordB_id
======================
. | .
. | .
. | .
した単語に単語を関連付けること
Words
=============
id | ...
=============
1 | .
2 | .
. | .
. | .
などのようなテーブルを持っていました
1 | 69
69 | 72
は、Synonyms
のエントリになる可能性があります。しかしそうかもしれない
1 | 69
1 | 72
私は実現しました。ペア設定の順番は関係ありませんので、
69 | 1
1 | 72
言葉も同様です。そして、我々は、おそらくどのような順序の重複レコードをしたいので、何か
の 69 | 1
1 | 72
69 | 1
よう
69 | 1
1 | 72
1 | 69
ていない私は、このすべてを確実にするためにデータベースを構成するための最良の方法を思ったんだけど。私は(インタビューで)提案して
CREATE PROCEDURE InsertSynonym
@idA INT,
@idB INT
AS
-- make @idA the smaller if it isn't already
IF @idA > @idB
BEGIN
@DECLARE @temp INT
SET @temp = @idA
@idA = @idB
@idB = @temp
END
-- insert if not already there
IF NOT EXISTS (SELECT * FROM Synonyms WHERE [email protected])
BEGIN
INSERT INTO Synonyms (wordA_id,wordB_id) VALUES (@idA,@idB)
END
- のように、このすべてをチェックSPROCてsynynomsを挿入されて、私のT-SQL構文のいずれかのバグがありますか?
- シノニムを挿入する唯一の方法は、この手順でロジックがすべてのケースをカバーすると仮定し、
Synonyms
テーブルのサイズを爆発させないようにしますか? - このシノニムパターンを最初から設計する方が良いでしょうか?
- ところで、T-SQLではXORスワップが可能ですか?
Wでありますあなたがまだインタビューをしているのであれば、シノニムのテーブルスキーマにソートのための数字の 'rank'カラムを追加したいと思うでしょう。類義語辞典を見るときは、与えられた単語の同義語は、通常、あなたの言葉にどれほど似ているかの順に並べられています。これはまた、双方向マップの最適化が機能しないようにします。最適化は不要です。 –