0
古いデータベース設計から新しいデータベース設計にデータをコピーしようとしています。2つのテーブルのサブセットで交差結合
データベースはマルチテナントアプリケーション用であり、問題のソーステーブルはウィジェットカテゴリ名のテーブルです。
各テナントには、カテゴリ名の自分のプライベートのセットを持っているので、古いテーブルは次のようになります。
CREATE TABLE OldCategories (
TenantId bigint,
CategoryName nvarchar(255)
)
OldCategories:
TenantId, CategoryName
1, 'Dog Toys'
1, 'Cat Toys'
1, 'Lizard Toys',
2, 'Dog Toys'
2, 'Duck Toys'
新しいデータベースはテナントのカテゴリのすべての行ごとに複製されなければならないことを、このような中間テーブルを追加します中間テーブルには、ここに新しいスキーマは次のとおりです。
CREATE TABLE NewCategoryGroups (
TenantId bigint,
GroupId bigint IDENTITY,
GroupName nvarchar(255)
)
CREATE TABLE NewCategories (
GroupId bigint,
CategoryName nvarchar(255)
CONSTRAINT PRIMARY KEY (GroupId, CategoryName)
)
ここNewCategoryGroupsテーブルには何があります:
NewCategoryGroups:
TenantId, GroupId, GroupName
1, 1, '2006 Toys'
1, 2, '2010 Toys'
1, 3, '2016 Toys'
2, 4, '2007 Toys'
2, 5, '2010 Toys'
そして、ここでは、私がNewCategoriesテーブルのために取得したいデータ例である:
NewCategories
GroupId, CategoryName
1, 'Dog Toys' -- Groups 1 through 3 are for Tenant 1
1, 'Cat Toys'
1, 'Lizard Toys',
2, 'Dog Toys'
2, 'Cat Toys'
2, 'Lizard Toys',
3, 'Dog Toys'
3, 'Cat Toys'
3, 'Lizard Toys',
4, 'Dog Toys' -- Groups 4 and 5 are for Tenant 2
4, 'Duck Toys'
5, 'Dog Toys'
5, 'Duck Toys'
私はそのままで、CROSS JOIN
を試してみた:これは失う除いて...
SELECT
CategoryName
FROM
OldCategories
CROSS JOIN NewCategoryGroups
TenantIdの区別は、すべてのテナントはすべての他のテナントのカテゴリを取得します。
INNER JOIN
を使用する場合がありますか? –@FelixPamittan私の質問が更新されました – Dai
データベースの設計がうまくいかず、各テーブルに主キーが必要です。 NewCategoriesのCategoryNameが重複しているのはなぜですか?これは、非正規化である - - 私はすぐにそれを正規化した場合には、別のFK参照を追加すると –