1차 최종 3NF 완성본 0 7 885

by SQL하다저승구경중 [DB 모델링/설계] [2018.10.22 15:48:03]


db.png (67,972Bytes)
1차 완성.png (132,610Bytes)
2차 완성.png (63,774Bytes)

최종완성본은  아래 사진과 같은데

이 전글에서 답변 주신거대로 해보는 것보다 제 생각대로 해보고 고쳐나가는게 좋을거 같다는 생각이 들어서

제가 맞다고 생각하는데로 해보았습니다.

틀린 부분이나 처음부터 다시해야한다면 상세하게 좀 알려주시면 참고하여 다시 제작해보겠습니다.

학비 700만원을 날리고 싶지 않아요 도와주세요 ㅜㅜ

*참고 사항*

a.       Based on the expense report, start with the following original table schema:

Expense (StatementNumber, EmployeeID, Name, Title, Email, Department, Manager, StartDateOfTrip, Nbdays, TripPurpose, ExpenseLineNumber, ExpenseDate, Account, Description, Vendor, Category, PaymentMethod, Amount). Consider (StatementNumber, ExpenseLineNumber) as PK. Draw the dependency diagram. Make sure you label the transitive and/or partial dependencies.

Account refers to a general ledger (GL) account created to hold expense information. Every single type of expense has a GL code or account that is composed of department and type of expense. For instance, an employee working in the IT department (has id 10) has to enter the airplane expense (category T with ID 100) in the first line of the expense report, the GL account is then 10100.  

Definition:  A general ledger is a complete record of financial transactions over the life of a company. The ledger holds account information that is needed to prepare financial statements, and includes accounts for assets, liabilities, owners' equity, revenues and expenses.

by 우리집아찌 [2018.10.22 15:54:14]

1. 전에 말했듯이 EMPLOYEE 와 DETAIL 간의 종속관계가 반대로 되어있습니다.

    그리고 DETAIL이라 쓰지말고 좀더 명확한 단어로 테이블명을 정하세요.

2. EXPENSE 테이블과 PAYMENT 테이블이 1:N 관계인지 한번더 확인해보세요.

   1:1 관계 ( 제가 보긴 한테이블로 가야하지 않을까 싶네요) 로 보여지며 설사 1:N 관계라 하여도 PK는 유일값을 가져야하는데 CATEGORY_ID 하나만 가지고      PK로 되어있습니다.

   그러면 PAYMENT 테이블은 CATEGORY 테이블과 1:1 관계를 뜻합니다. 확인을 잘해보세요.


by SQL하다저승구경중 [2018.10.22 15:56:17]

그렇군요 

2번째 지적해주신 부분은 저도 그렇게 생각을 해보았는데 나눠야하지 않을까 고민되서

보통 사람들은 처음 생각한대로 간다는데 전 다르게 생각한데로 갔네요 ㅠㅠ


by SQL하다저승구경중 [2018.10.22 16:00:20]

위에 수정한 사진 하나 더 올려보겠습니다.


by 우리집아찌 [2018.10.22 16:14:24]

EMPLOYEE 테이블에 TITLE_NUM도 빼주셔야죠.. 사용자가 하나의 TITLE만 쓰지 않습니다. 여러개 사용할수있지요.

SIGNATURE 테이블은 어디서 쓰이는지 위의 그림(잘안보임)에서 찾기 힘드네요.. 설명좀 부탁드려요.

EXPENSE 테이블은 인조식별자(EXLINE_NUM) 사용하셨는데 ( TITLE_NUM , TITLE_NUM 별 순번으로 가는것이 좋아보입니다 ) 

EXPENSE 테이블의 TOTAL_PAY 컬럼도 필요없습니다. -> EXPENSE테이블의 AMOUNT를 연산해서 의해서 나와야합니다.(아마 전체 로우의 값)

CATEGORY 테이블에 CATE_TOTAL이 금액이면 의미 없어 보입니다. -> EXPENSE테이블의 AMOUNT를 연산해서 의해서 나와야합니다.

대충본것이니 판단하여서 적용하세요.


by SQL하다저승구경중 [2018.10.22 16:46:49]

EPLINE_NUM(위에서 PK로 사용하면 좋겠다고 해서 사용), 그럼 EXPENSE랑 카테고리의 토탈은 없어도 되는게 사용된 금액에서 카테고리별로 그룹화 시켜서 토탈을 찾아내면 카테고리의 토탈을 만들 수 있나요? 카테고리 토탈은 카테고리별 총 금액을 말하는 것 같습니다.;; 

SINATURE 테이블은 DATE / ACCOUNT /DESCRIPTION 바로 밑에 있습니다.


by 우리집아찌 [2018.10.22 17:07:15]

일단 SIGNATURE 는 어디 종속되는지 확인해보세요. 

서명은 TITLE에 종속되야 하겠지요. 그리고 날짜도 안보이네요.

정규화해도 되는 부분입니다.  물론 제한 두고자 하나의 ROW로 처리할수도 있습니다

 

전체 금액에 대해 말하자면 SQL로 구할수 있는 부분인데 굳이 컬럼으로 가져갈 필요는 없지요.

카테고리 금액도 전체가 아니라 현재 보고있는 TITLE의 금액이겠지요.

 

요건들이 안보이고 장표만 보고 하려니 조금 알송달송합니다.


by SQL하다저승구경중 [2018.10.22 23:44:49]

아 그렇군요... 복잡하네요 ㅎ

답변 감사합니다. 많은 도움이 되고 있네요^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입