2011-03-18 6 views
2

로컬 IP 관리 사이트를 다시 디자인하고 도움이 필요합니다. 현재 특정 서브넷 ID와 연관된 외부 키 건물 ID가있어 클라이언트가 서브넷이있는 건물을 알고 있습니다. 그러나 문제는 서브넷이 여러 건물로 분할 될 수 있다는 것입니다. 이제는 서브넷 간 패러다임이 더 이상 유지되지 않으므로이를 관리하는 올바른 방법을 놓치고 있습니다.SQL Server의 열에 ID의 배열/튜플을 저장하는 올바른 방법은 무엇입니까

즉시 마음에오고 나빠 보이는 한 가지 옵션은 건물 ID 필드를 쉼표로 구분 된 건물 ID의 문자열로 변경하는 것입니다. 그것은 빠르며 효과가 있지만 그것은 나에게 나쁜 느낌을줍니다.

두 번째 아이디어는 BuildingIDTuple 테이블을 만드는 것입니다. 여기서는 서브넷 ID를 buildingid에 매핑하는 여러 행이있을 수 있습니다.

subnet id | building id 
------------------------ 
    1  |  2 
    1  |  3 

이 방법은 깨끗하고 미래 지향적 보인다, 그러나 나는 또한 많은 두통을 일으키는 원인이되는 SQL 쿼리를 상상할 수있다.

내가 생각하는 이상적인 방법은 건물 ID의 배열을 서브넷 테이블에 포함시키는 것입니다.하지만 그 생각은 아닙니다.

그래서 내가하는 일을 디자인하는 가장 좋은 방법은 무엇일까요? 어떤 도움이라도 대단히 감사하게 될 것입니다!

답변

8

그냥 여분의 테이블을 만들면 필요한 조인이 그렇게 복잡해지지는 않을 것입니다.

쉼표로 구분 된 목록이나 무엇이든지간에 두통을 일으키는 구문 분석.

+0

그건 내가 생각한 것이지만, 여러분은 모든 의심을 제거했습니다. 다들 감사 해요! – bluefear

5

은 단일 데이터베이스 열에 값 집합을 저장하지 마십시오 !! 그들을 새로운 테이블로 나눕니다. 각 값은 개별 행으로 !! 그렇지 않으면 쿼리 할 때마다 해당 CSV 값을 분할하는 노예가됩니다. 귀하의 BuildingIDTuple 테이블로 이동하는 것입니다. 쿼리가 더 어렵지는 않지만 각 서브넷에 대해 가능한 여러 행을 지원해야합니다.

관련 문제